package com.xtoad.ecms.common.utils.generate;

import java.text.MessageFormat;
import java.util.Map;

/**
 * 服务类接口生成器
 *
 * @author xtoad
 * @date 2021/1/19
 */
public class ServiceGenerator implements IGenerator {
    /**
     * 根据包路径和类名生成类
     *
     * @param packagePath 包路径
     * @param modelName   类名
     * @return 生成的类
     */
    @Override
    public String generate(String packagePath, String modelName) {
        System.out.println("generate Service start ");
        Map<String, String> classComment = Generator.getClassComment(Generator.modelPackage + "." + modelName);
        StringBuilder sb = new StringBuilder();
        sb.append("package ").append(packagePath).append(";\r\n")
                .append("\r\n")
                .append("import ").append(Generator.dtoPackage).append(".{0}DTO;\r\n")
                .append("\r\n")
                .append("import java.util.List;\r\n")
                .append("\r\n")
                .append("/**\r\n")
                .append(" * {2}Service\r\n")
                .append(" *\r\n")
                .append(" * @author ").append(Generator.author).append("\r\n")
                .append(" * @date ").append(Generator.dateString).append("\r\n")
                .append(" */\r\n")
                .append("public interface I{0}Service '{'\r\n")
                .append("\r\n")
                .append("    /**\r\n")
                .append("     * 根据id查询{2}\r\n")
                .append("     *\r\n")
                .append("     * @param id {2}id\r\n")
                .append("     * @return 查询结果\r\n")
                .append("     */\r\n")
                .append("    {0}DTO get{0}ById(final Long id);\r\n")
                .append("\r\n")
                .append("    /**\r\n")
                .append("     * 查询全部{2}，不分页\r\n")
                .append("     *\r\n")
                .append("     * @return 查询结果\r\n")
                .append("     */\r\n")
                .append("    List<{0}DTO> getAll{0}();\r\n")
                .append("\r\n")
                .append("    /**\r\n")
                .append("     * 新增{2}\r\n")
                .append("     *\r\n")
                .append("     * @param {1}DTO 保存对象\r\n")
                .append("     * @return 新增结果\r\n")
                .append("     */\r\n")
                .append("    {0}DTO insert(final {0}DTO {1}DTO);\r\n")
                .append("\r\n")
                .append("    /**\r\n")
                .append("     * 删除{2}\r\n")
                .append("     *\r\n")
                .append("     * @param id 删除对象id\r\n")
                .append("     */\r\n")
                .append("    void deleteById(final Long id);\r\n")
                .append("\r\n")
                .append("    /**\r\n")
                .append("     * 删除{2}\r\n")
                .append("     *\r\n")
                .append("     * @param {1}DTO 删除对象\r\n")
                .append("     */\r\n")
                .append("    void delete(final {0}DTO {1}DTO);\r\n")
                .append("\r\n")
                .append("    /**\r\n")
                .append("     * 更新{2}\r\n")
                .append("     *\r\n")
                .append("     * @param {1}DTO 更新对象\r\n")
                .append("     * @return 更新结果\r\n")
                .append("     */\r\n")
                .append("    {0}DTO update(final {0}DTO {1}DTO);\r\n")
                .append("\r\n")
                .append("    /**\r\n")
                .append("     * 批量新增{2}\r\n")
                .append("     *\r\n")
                .append("     * @param {1}DTOList 新增对象\r\n")
                .append("     * @return 新增结果\r\n")
                .append("     */\r\n")
                .append("    List<{0}DTO> batchInsert(final List<{0}DTO> {1}DTOList);\r\n")
                .append("\r\n")
                .append("    /**\r\n")
                .append("     * 批量删除{2}\r\n")
                .append("     *\r\n")
                .append("     * @param {1}DTOList 删除对象\r\n")
                .append("     */\r\n")
                .append("    void batchDelete(final List<{0}DTO> {1}DTOList);\r\n")
                .append("\r\n")
                .append("    /**\r\n")
                .append("     * 批量更新{2}\r\n")
                .append("     *\r\n")
                .append("     * @param {1}DTOList 更新对象\r\n")
                .append("     * @return 更新结果\r\n")
                .append("     */\r\n")
                .append("    List<{0}DTO> batchUpdate(final List<{0}DTO> {1}DTOList);\r\n")
                .append("\r\n")
                .append("'}'\r\n");

        System.out.println("generate Service end ");

        return MessageFormat.format(sb.toString(), modelName, Generator.firstCharLower(modelName), classComment.get(modelName));
    }
}
